Messaging systems provide basic functionality to store and forward messages between computing devices in a computer network. In the context of computer programming, messaging is used to exchange messages between application components. In one example, a messaging system is implemented in a client-server model.
Messaging servers are often organized in one or both of two patterns including point-to-point messaging and publish-subscribe messaging. The patterns are implemented using a messaging entity, which is a messaging primitive used to receive and distribute message. A queue is an example of a messaging entity that can implement the point-to-pattern. A sender places the messages in the queue until a receiver retrieves them. A topic is an example of a messaging entity that can implement the publish-subscribe pattern. A publisher places messages in the topic and one or more subscribers can consume the message. The patterns often provide an asynchronous communications protocol so that the sender and receiver, or the publisher and subscribers, of the message do not need to interact with the message entity at the same time.
Messaging systems are used to decouple communications between application components and also to connect entities across network boundaries. Thus, application components in distributed computing systems, for example, can reliably exchange data and provide application consistency. Many distributed computing systems, including cloud computing, apply messaging systems to provide a reliable, flexible mechanism for the asynchronous exchange of data and events throughout the network.